package com.kty.methods.mhys.method.entrance;

import com.kty.cesuan.pojo.Mhys;
import com.kty.methods.mhys.method.mhys.MeiHua;
import com.kty.methods.utils.Utils;
import com.nlf.calendar.Lunar;
import com.nlf.calendar.Solar;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class MeiHuaYiShu {

    /**
     * ★入口：信息封装
     */
    public void run(MeiHua meiHua) {
        // 信息封装
        infoEncapsulation(meiHua);
    }

    /**
     * 信息封装
     *
     * @param meiHua 方法类
     */
    protected void infoEncapsulation(MeiHua meiHua) {

        // ①设置信息（必须、顺序必须一致）
        meiHua.solarDate(); // 设置公历日期
        meiHua.lunarDateStr(); // 获取并设置【农历日期】
        meiHua.baZi(); // 设置八字
        meiHua.baZiWuXing(); // 设置八字五行
        meiHua.baZiNaYin(); // 设置八字纳音
        meiHua.yearNumber(); // 获取并设置 '年数'
        meiHua.monthNumber(); // 获取并设置 '月数'
        meiHua.dayNumber(); // 获取并设置 '日数'
        meiHua.timeNumber(); // 获取并设置 '时数'
        meiHua.shangGuaNumber(); // 获取并设置 '上卦数'
        meiHua.xiaGuaNumber(); // 获取并设置 '下卦数'
        meiHua.dongYaoNumber(); // 获取并设置 '动爻数'
        meiHua.guaMa(); // 获取并设置 '卦码'
        meiHua.shangGua(); // 获取并设置【上卦】
        meiHua.xiaGua(); // 获取并设置【下卦】
        meiHua.dongYao(); // 获取并设置【动爻】
        meiHua.shangGuaPattern(); // 获取并设置【上卦图形】
        meiHua.xiaGuaPattern(); // 获取并设置【下卦图形】
        meiHua.benGuaPattern(); // 获取并设置【本卦图形】
        meiHua.benGua(); // 获取并设置【本卦】
        meiHua.bianGuaPattern(); // 获取并设置【变卦图形】
        meiHua.bianGua(); // 获取并设置【变卦】
        meiHua.cuoGuaPattern(); // 获取并设置【错卦图形】
        meiHua.cuoGua(); // 获取并设置【错卦】
        meiHua.zongGuaPattern(); // 获取并设置【综卦图形】
        meiHua.zongGua(); // 获取并设置【综卦】
        meiHua.huGuaPattern(); // 获取并设置【互卦图形】
        meiHua.huGua(); // 获取并设置【互卦】


    }

//**********************************************************************************************************************

    /**
     * 控制台输出信息
     */
    public void info(MeiHua meiHua) {

        Lunar lunarDate = meiHua.getLunarDate(); // 获取农历日期
        Solar solarDate = lunarDate.getSolar(); // 获取公历日期
        String baZi = meiHua.getBaZi(); // 获取八字
        String baZiWuXing = meiHua.getBaZiWuXing(); // 获取八字五行
        String baZiNaYin = meiHua.getBaZiNaYin(); // 获取八字纳音
        int yearNumber = meiHua.getYearNumber(); // 获取'年数'
        int monthNumber = meiHua.getMonthNumber(); // 获取'月数'
        int dayNumber = meiHua.getDayNumber(); // 获取'日数'
        int timeNumber = meiHua.getTimeNumber(); // 获取'时数'
        int shangGuaNumber = meiHua.getShangGuaNumber(); // 获取'上卦数'
        int xiaGuaNumber = meiHua.getXiaGuaNumber(); // 获取'下卦数'
        int dongYaoNumber = meiHua.getDongYaoNumber(); // 获取'动爻数'
        String shangGua = meiHua.getShangGua(); // 获取【上卦】
        String xiaGua = meiHua.getXiaGua(); // 获取【下卦】
        String dongYao = meiHua.getDongYao();  // 获取【动爻】
        String shangGuaPattern = meiHua.getShangGuaPattern(); // 获取【上卦图形】
        String xiaGuaPattern = meiHua.getXiaGuaPattern(); // 获取【下卦图形】
        String benGua = meiHua.getBenGua(); // 获取【本卦】
        String benGuaPattern = meiHua.getBenGuaPattern(); // 获取【本卦图形】
        String bianGua = meiHua.getBianGua(); // 获取【变卦】
        String bianGuaPattern = meiHua.getBianGuaPattern(); // 获取【变卦图形】
        String cuoGua = meiHua.getCuoGua(); // 获取【错卦】
        String cuoGuaPattern = meiHua.getCuoGuaPattern(); // 获取【错卦图形】
        String zongGua = meiHua.getZongGua(); // 获取【综卦】
        String zongGuaPattern = meiHua.getZongGuaPattern(); // 获取【综卦图形】
        String huGua = meiHua.getHuGua(); // 获取【互卦】
        String huGuaPattern = meiHua.getHuGuaPattern(); // 获取【互卦图形】
        String sgInfo = meiHua.info(0, dongYaoNumber); // 判断上卦为 用卦还是体卦
        String xgInfo = meiHua.info(1, dongYaoNumber); // 判断下卦为 用卦还是体卦

        // 打印
        System.out.println("公历日期：" + solarDate);
        System.out.println("农历日期：" + lunarDate);
        System.out.println("年数：" + yearNumber);
        System.out.println("月数：" + monthNumber);
        System.out.println("日数：" + dayNumber);
        System.out.println("时数：" + timeNumber);
        System.out.println("上卦数：" + shangGuaNumber);
        System.out.println("下卦数：" + xiaGuaNumber);
        System.out.println("动爻数：" + dongYaoNumber);
        System.out.println("上卦：" + shangGua + "（" + sgInfo + "）");
        System.out.println("下卦：" + xiaGua + "（" + xgInfo + "）");
        System.out.println("动爻：" + dongYao);
        System.out.println("上卦图形：" + shangGuaPattern);
        System.out.println("下卦图形：" + xiaGuaPattern);
        System.out.println("本卦：" + benGua);
        System.out.println("本卦图形：" + benGuaPattern);
        System.out.println("错卦：" + cuoGua);
        System.out.println("错卦图形：" + cuoGuaPattern);
        System.out.println("综卦：" + zongGua);
        System.out.println("综卦图形：" + zongGuaPattern);
        System.out.println("互卦：" + huGua);
        System.out.println("互卦图形：" + huGuaPattern);
        System.out.println("变卦：" + bianGua);
        System.out.println("变卦图形：" + bianGuaPattern);
        System.out.println();

    }

    /**
     * 保存至数据库（所有信息）
     */
    public String allInfoToSql(MeiHua meiHua) {

        Lunar lunarDate = meiHua.getLunarDate(); // 获取农历日期
        Solar solarDate = lunarDate.getSolar(); // 获取公历日期
        String baZi = meiHua.getBaZi(); // 获取八字
        String baZiWuXing = meiHua.getBaZiWuXing(); // 获取八字五行
        String baZiNaYin = meiHua.getBaZiNaYin(); // 获取八字纳音
        int yearNumber = meiHua.getYearNumber(); // 获取'年数'
        int monthNumber = meiHua.getMonthNumber(); // 获取'月数'
        int dayNumber = meiHua.getDayNumber(); // 获取'日数'
        int timeNumber = meiHua.getTimeNumber(); // 获取'时数'

        int shangGuaNumber = meiHua.getShangGuaNumber(); // 获取'上卦数'
        int xiaGuaNumber = meiHua.getXiaGuaNumber(); // 获取'下卦数'
        int dongYaoNumber = meiHua.getDongYaoNumber(); // 获取'动爻数'
        String guaMa = meiHua.getGuaMa(); // 获取'卦码'

        String shangGua = meiHua.getShangGua(); // 获取【上卦】
        String xiaGua = meiHua.getXiaGua(); // 获取【下卦】
        String dongYao = meiHua.getDongYao();  // 获取【动爻】
        String shangGuaPattern = meiHua.getShangGuaPattern(); // 获取【上卦图形】
        String xiaGuaPattern = meiHua.getXiaGuaPattern(); // 获取【下卦图形】
        String benGua = meiHua.getBenGua(); // 获取【本卦】
        String benGuaPattern = meiHua.getBenGuaPattern(); // 获取【本卦图形】
        String bianGua = meiHua.getBianGua(); // 获取【变卦】
        String bianGuaPattern = meiHua.getBianGuaPattern(); // 获取【变卦图形】
        String cuoGua = meiHua.getCuoGua(); // 获取【错卦】
        String cuoGuaPattern = meiHua.getCuoGuaPattern(); // 获取【错卦图形】
        String zongGua = meiHua.getZongGua(); // 获取【综卦】
        String zongGuaPattern = meiHua.getZongGuaPattern(); // 获取【综卦图形】
        String huGua = meiHua.getHuGua(); // 获取【互卦】
        String huGuaPattern = meiHua.getHuGuaPattern(); // 获取【互卦图形】
        String sgInfo = meiHua.info(0, dongYaoNumber); // 判断上卦为 用卦还是体卦
        String xgInfo = meiHua.info(1, dongYaoNumber); // 判断下卦为 用卦还是体卦

        return "★【公历日期：" + solarDate + "】\n" +
                "★【农历日期：" + lunarDate + "】\n" +
                "【八字：" + baZi + "】\n" +
                "【八字五行：" + baZiWuXing + "】\n" +
                "【八字纳音：" + baZiNaYin + "】\n" +
                "【上卦" + "（" + sgInfo + "）：" + shangGua + "(" + shangGuaPattern + ")】\n" +
                "【下卦" + "（" + xgInfo + "）：" + xiaGua + "(" + xiaGuaPattern + ")】\n" +
                "【卦码：" + guaMa + "】\n" +
                "【动爻：" + dongYao + "爻爻动】\n" +
                "【本卦：" + benGua + "(" + benGuaPattern + ")】\n" +
                "【互卦：" + huGua + "(" + huGuaPattern + ")】\n" +
                "【变卦：" + bianGua + "(" + bianGuaPattern + ")】\n" +
                "【错卦：" + cuoGua + "(" + cuoGuaPattern + ")】\n" +
                "【综卦：" + zongGua + "(" + zongGuaPattern + ")】\n" +
                "【[年数：" + yearNumber + "] " +
                "[月数：" + monthNumber + "] " +
                "[日数：" + dayNumber + "] " +
                "[时数：" + timeNumber + "]】\n" +
                "【[上卦数：" + shangGuaNumber + "] " +
                "[下卦数：" + xiaGuaNumber + "] " +
                "[动爻数：" + dongYaoNumber + "]】";

    }

    /**
     * 数据库保存数据 格式
     */
    public Mhys getMhys(MeiHua meiHua) {

        Mhys mhys = new Mhys();

        // 设置信息
        mhys.setId(Utils.getId(4)); // 设置id
        mhys.setSolarDate(meiHua.getSolarDate()); // 设置公历日期
        mhys.setLunarDate(meiHua.getLunarDateStr()); // 设置农历日期
        mhys.setBaZi(meiHua.getBaZi()); // 设置八字
        mhys.setBaZiWuXing(meiHua.getBaZiWuXing()); // 设置八字五行
        mhys.setBaZiNaYin(meiHua.getBaZiNaYin());  // 设置八字纳音
//        mhys.setShangGua("上卦" + "（" + meiHua.info(0, meiHua.getDongYaoNumber()) + "）：" + meiHua.getShangGua() + "(" + meiHua.getShangGuaPattern() + ")"); // 设置上卦
////        mhys.setXiaGua("下卦" + "（" + meiHua.info(1, meiHua.getDongYaoNumber()) + "）：" + meiHua.getXiaGua() + "(" + meiHua.getXiaGuaPattern() + ")"); // 设置下卦
        mhys.setShangGua("【" + meiHua.getShangGua() + "(" + meiHua.getShangGuaPattern() + ") - " + meiHua.info(0, meiHua.getDongYaoNumber()) + "】"); // 设置上卦
        mhys.setXiaGua("【" + meiHua.getXiaGua() + "(" + meiHua.getXiaGuaPattern() + ") - " + meiHua.info(1, meiHua.getDongYaoNumber()) + "】"); // 设置下卦
        mhys.setDongYao(meiHua.getDongYao() + "爻爻动"); // 设置动爻
        mhys.setGuaMa(meiHua.getGuaMa()); // 设置卦码
        mhys.setBenGua(meiHua.getBenGua() + "(" + meiHua.getBenGuaPattern() + ")"); // 设置本卦
        mhys.setHuGua(meiHua.getHuGua() + "(" + meiHua.getHuGuaPattern() + ")"); // 设置互卦
        mhys.setBianGua(meiHua.getBianGua() + "(" + meiHua.getBianGuaPattern() + ")"); // 设置变卦
        mhys.setCuoGua(meiHua.getCuoGua() + "(" + meiHua.getCuoGuaPattern() + ")"); // 设置错卦
        mhys.setZongGua(meiHua.getZongGua() + "(" + meiHua.getZongGuaPattern() + ")"); // 设置综卦
        mhys.setInformation(
                "【[年数：" + meiHua.getYearNumber() + "] " +
                        "[月数：" + meiHua.getMonthNumber() + "] " +
                        "[日数：" + meiHua.getDayNumber() + "] " +
                        "[时数：" + meiHua.getTimeNumber() + "]】" +
                        "【[上卦数：" + meiHua.getShangGuaNumber() + "] " +
                        "[下卦数：" + meiHua.getXiaGuaNumber() + "] " +
                        "[动爻数：" + meiHua.getDongYaoNumber() + "]】"
        ); // 设置其他信息
        mhys.setAllInformation(allInfoToSql(meiHua)); // 设置所有信息
        mhys.setCreateTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒"))); // 设置操作时间


        return mhys;

    }

}
